home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow / Players / JukeboxASF / playvideo.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  3.7 KB  |  184 lines

  1. //------------------------------------------------------------------------------
  2. // File: PlayVideo.cpp
  3. //
  4. // Desc: DirectShow sample code - media control functions.
  5. //
  6. // Copyright (c) 1998-2001 Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. #include "stdafx.h"
  11. #include <dshow.h>
  12.  
  13. #include "playvideo.h"
  14.  
  15.  
  16. HRESULT RunMedia()
  17. {
  18.     HRESULT hr=S_OK;
  19.  
  20.     if (!pMC)
  21.         return S_OK;
  22.  
  23.     // Start playback
  24.     hr = pMC->Run();
  25.     if (FAILED(hr)) {
  26.         RetailOutput(TEXT("\r\n*** Failed(%08lx) in Run()!\r\n"), hr);
  27.         return hr;
  28.     }
  29.  
  30.     // Remember play state
  31.     g_psCurrent = State_Running;
  32.     return hr;
  33. }
  34.  
  35.  
  36. HRESULT StopMedia()
  37. {
  38.     HRESULT hr=S_OK;
  39.  
  40.     if (!pMC)
  41.         return S_OK;
  42.  
  43.     // If we're already stopped, don't check again
  44.     if (g_psCurrent == State_Stopped)
  45.         return hr;
  46.  
  47.     // Stop playback
  48.     hr = pMC->Stop();
  49.     if (FAILED(hr)) {
  50.         RetailOutput(TEXT("\r\n*** Failed(%08lx) in Stop()!\r\n"), hr);
  51.         return hr;
  52.     }
  53.  
  54.     // Remember play state
  55.     g_psCurrent = State_Stopped;
  56.     return hr;
  57. }
  58.  
  59.  
  60. HRESULT PauseMedia(void)
  61. {
  62.     HRESULT hr=S_OK;
  63.  
  64.     if (!pMC)
  65.         return S_OK;
  66.  
  67.     // Play/pause
  68.     if(g_psCurrent != State_Running)
  69.         return S_OK;
  70.  
  71.     hr = pMC->Pause();
  72.     if (FAILED(hr)) {
  73.         RetailOutput(TEXT("\r\n*** Failed(%08lx) in Pause()!\r\n"), hr);
  74.         return hr;
  75.     }
  76. //  else
  77. //      RetailOutput(TEXT("*** Media is PAUSED.\r\n"));
  78.  
  79.     // Remember play state
  80.     g_psCurrent = State_Paused;
  81.     return hr;
  82. }
  83.  
  84.  
  85. HRESULT MuteAudio(void)
  86. {
  87.     HRESULT hr=S_OK;
  88.     IBasicAudio *pBA=NULL;
  89.     long lVolume;
  90.  
  91.     if (!pGB)
  92.         return S_OK;
  93.  
  94.     hr =  pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA);
  95.     if (FAILED(hr))
  96.         return S_OK;
  97.  
  98.     // Read current volume
  99.     hr = pBA->get_Volume(&lVolume);
  100.     if (hr == E_NOTIMPL)
  101.     {
  102.         // Fail quietly if this is a video-only media file
  103.         pBA->Release();
  104.         return hr;
  105.     }
  106.     else if (FAILED(hr))
  107.     {
  108.         RetailOutput(TEXT("Failed in pBA->get_Volume!  hr=0x%x\r\n"), hr);
  109.         pBA->Release();
  110.         return hr;
  111.     }
  112.  
  113.     lVolume = VOLUME_SILENCE;
  114. //  RetailOutput(TEXT("*** Media is MUTING.\r\n"));
  115.  
  116.     // Set new volume
  117.     hr = pBA->put_Volume(lVolume);
  118.     if (FAILED(hr))
  119.     {
  120.         RetailOutput(TEXT("Failed in pBA->put_Volume!  hr=0x%x\r\n"), hr);
  121.     }
  122.  
  123.     pBA->Release();
  124.     return hr;
  125. }
  126.  
  127.  
  128. HRESULT ResumeAudio(void)
  129. {
  130.     HRESULT hr=S_OK;
  131.     IBasicAudio *pBA=NULL;
  132.     long lVolume;
  133.  
  134.     if (!pGB)
  135.         return S_OK;
  136.  
  137.     hr =  pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA);
  138.     if (FAILED(hr))
  139.         return S_OK;
  140.  
  141.     // Read current volume
  142.     hr = pBA->get_Volume(&lVolume);
  143.     if (hr == E_NOTIMPL)
  144.     {
  145.         // Fail quietly if this is a video-only media file
  146.         pBA->Release();
  147.         return hr;
  148.     }
  149.     else if (FAILED(hr))
  150.     {
  151.         RetailOutput(TEXT("Failed in pBA->get_Volume!  hr=0x%x\r\n"), hr);
  152.         pBA->Release();
  153.         return hr;
  154.     }
  155.  
  156.     lVolume = VOLUME_FULL;
  157. //  RetailOutput(TEXT("*** Media is Resuming normal audio\r\n"));
  158.  
  159.     // Set new volume
  160.     hr = pBA->put_Volume(lVolume);
  161.     if (FAILED(hr))
  162.     {
  163.         RetailOutput(TEXT("Failed in pBA->put_Volume!  hr=0x%x\r\n"), hr);
  164.     }
  165.  
  166.     pBA->Release();
  167.     return hr;
  168. }
  169.  
  170.  
  171. void RetailOutput(TCHAR *tszErr, ...)
  172. {
  173.     TCHAR tszErrOut[MAX_PATH + 256];
  174.  
  175.     va_list valist;
  176.  
  177.     va_start(valist,tszErr);
  178.     wvsprintf(tszErrOut, tszErr, valist);
  179.     OutputDebugString(tszErrOut);
  180.     va_end (valist);
  181. }
  182.  
  183.  
  184.